2507. Граница
В международной политике важным понятием является граница
между государствами. Нечеткое понимание сторонами того, где проходит граница,
может привести к международным конфликтам и даже войнам.
В этой задаче ситуация обстоит несколько проще, так как у
двух рассматриваемых в задаче государств есть четкое понимание, какая
территория принадлежит какому из них.
Территория, занимаемая этими двумя государствами,
представляет собой прямоугольник размером h
на w километров, разбитый на квадраты
со стороной в один километр. Каждый из этих квадратов полностью принадлежит
либо первому государству, либо второму.
Необходимо определить длину границы между двумя
государствами. Сторона единичного квадрата считается принадлежащей границе,
если по одну сторону от нее лежит квадрат, принадлежащий первому государству, а
по другую - принадлежащий второму.
Вход. Первая строка содержит два целых числа: w и h
(1 ≤ w, h ≤ 100) – размеры прямоугольника в километрах. Далее следуют
h строк, описывающих территорию.
Каждая из них содержит w символов.
Если символ равен A, то соответствующий единичный квадрат принадлежит первому
государству, а если он равен B, то второму. Гарантируется, что каждому
государству принадлежит хотя бы один квадрат.
Территории каждого из государств представляют собой связные
области.
Выход. Выведите одно целое число – длину границы
между государствами в километрах.
Пример
входа |
Пример
выхода |
5 6 AAABB ABBBB AAABB AAAAB AAAAB
AABBB |
13 |
массив
- двумерный
Занесем прямоугольную область в символьный массив. Рассмотрим
символ s[i][j]. Если он не совпадает с s[i
+ 1][j], то между ними имеется
граница длины 1 (снизу от s[i][j] имеется граница). Аналогично если s[i][j]
не совпадает с s[i][j + 1], то между ними имеется граница
длины 1 (справа от s[i][j] имеется граница). Остается перебрать
все позиции (i, j) и подсчитать для них количество нижних и правых границ.
Пример
Граница между
государствами отображена красным цветом. Ее длина равна 13.
Территории
государств храним в массиве s.
vector<string> s;
Читаем входные
данные.
cin >> w >> h;
s.resize(h);
for (i = 0; i < h; i++)
cin >> s[i];
Считаем длину вертикальных границ.
for(i = 0; i < h; i++)
for(j = 0; j < w - 1; j++)
if (s[i][j]
!= s[i][j+1]) res++;
Считаем длину горизонтальных границ.
for(i = 0; i < h - 1; i++)
for(j = 0; j < w; j++)
if (s[i][j]
!= s[i+1][j]) res++;
Выводим ответ.
cout << res << endl;